{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)\n",
    "\n",
    "mnist = input_data.read_data_sets(\"./\")\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4, 4, idx + 1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder('float', [None, 784])\n",
    "y = tf.placeholder('int64', [None])\n",
    "learning_rate = tf.placeholder('float')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def initialize(shape, stddev = 0.1):\n",
    "    return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10\n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "training_step = 1000\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 trainning steps, the loss is 0.377292, the validation accuracy is 0.8664\n",
      "after 200 trainning steps, the loss is 0.337642, the validation accuracy is 0.9076\n",
      "after 300 trainning steps, the loss is 0.196498, the validation accuracy is 0.9154\n",
      "after 400 trainning steps, the loss is 0.103003, the validation accuracy is 0.934\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W0808 23:08:31.893534 21308 deprecation.py:323] From C:\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:960: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 500 trainning steps, the loss is 0.343131, the validation accuracy is 0.919\n",
      "after 600 trainning steps, the loss is 0.104181, the validation accuracy is 0.942\n",
      "after 700 trainning steps, the loss is 0.0596996, the validation accuracy is 0.9426\n",
      "after 800 trainning steps, the loss is 0.328421, the validation accuracy is 0.9456\n",
      "after 900 trainning steps, the loss is 0.33546, the validation accuracy is 0.948\n",
      "the training is finish\n",
      "the test accuracy is :  0.9432\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels\n",
    "    }\n",
    "    test_data = {\n",
    "        x: mnist.test.images,\n",
    "        y: mnist.test.labels\n",
    "    }\n",
    "    \n",
    "    for i in range(training_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict = {\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\"after %d trainning steps, the loss is %g, the validation accuracy is %g\" %(i, loss ,validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "                \n",
    "    print(\"the training is finish\") \n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuracy is : \", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W0808 23:08:32.461534 21308 deprecation.py:323] From C:\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:1276: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "I0808 23:08:32.466533 21308 saver.py:1280] Restoring parameters from ./model.ckpt-900\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcoAAAHRCAYAAADqjfmEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdd5gUxdYG8PdsYMk5SlpyVFQUA4pgTpgxIWC+RsxeAyrmcO9nzgFRMKBiQi9mURElCihRBUQQyTkssHu+P7q2q2uc6Z3dCbvLvr/n4eH0VE119fZ0V3dVB1FVEBERUXQZpV0BIiKisowNJRERUQg2lERERCHYUBIREYVgQ0lERBSCDSUREVEINpREREQh0t5QishQEdkhIptEpFqc3/ldRLaLyMiQPCoim0Xk3uTVNvlEJMcs+w4Ruae065MMXKe71jrl+iz/61NEhpv1sSjO/O3NMueLyIUx8vQWkQKT7+ikVjiNSrJ+S9RQmpkE/+WLyBPFKGKUqlZX1c2mvLER5W0XkZ8LM6tqGwD3xVFuN1W9NVDPviLyiylzgoh0DqTliMgjIvKXiKwVkadFJDtkmcPKOkxEForIMhE5I/B5bRGZJiI1AsuSp6rVAbwWx/KkhflbvCQif4jIRhH5SUSOKWYxkev0BvP32mj+NjcEM5eRdfq8iMwzG/+5EWnlfZ1eISJTRCRPRIaXoIjI9dlHRL4WkfXRdr4pWp/PRuwX8kRkY7RCRaS+iHwvIqtFZJ2I/CAiPQPp5W59ikhdEXnPHFz8ISJnF7OIh1Q1N1BejogME5ENIvK3iFxbmKaq880yf1dEmX+Z38UnpswmIvKh2eZURHKDmcPmadIPE5G5IrLF/L5axpqxiOSaPFvMdw6PKCdl67dEDaX5Q1U3M2sEYCuAt0tSlinvmIgyJyRSHgCISDt4f4hLANQGMAbAhyKSZbLcBGAfAF0BtAewN4AhJSzrUQB9ARwN4BkRyTSf3w/gAVWNunGXIVkA/gRwCIBaAG4D8Fbkj76YBMBAAHXg/V2uEJEzE6lkMtepMQPAZQCmRUkr7+v0LwD3ABiWpPI2m7JuKCpjvIpan6p6ScR+4Q3E3i9sAnA+gAbwfnMPAhhTzrfRpwBsh7eP7Q+v3l0SKG8ogHYAWgLoA+BGSfzMsADAJwBOLe48RaQ+gHfh7W/qApgCYFTIvN4A8BOAegBuBfCOiDQwaSldv8noej0NwAoUfSQSF7NzPhjAiASLOgrAd6o6XlV3wttwmsJrDADvj/q4qq5R1ZUAHoe3oZWkrGqq+ouqzoD3w64nIj0AtFLVtxJcjpRT1c2qOlRVF6lqgap+BGAhgO4JlPmQqk5T1Z2qOg/ABwB6FvW9IiRznUJVn1LVLwFsi5Jc3tfpu6r6PoDVSSpvkqqOALAgGeUZRa1Pn3hdwKcCeCVG/bap6jxVLYB3kJYPr8Gsa7KUq/UZWN7bVHWTqo4H8CGAAQkUOxDA3aq6VlXnAHgBwLmJ1FNVl6vq0wAml2CepwCYpapvq+o2eI1qNxHpGFmIiBQe+N6hqltVdTSAn2Eb6JSu32Q0lIMAvKqBh8aaro+DSljeQHgbz8IE6yXmX+R015D0ZiJSqwRlrRCRbiLSDd4R1lp4RziDE1yGUiEijeCdkc0KfFbidSoiAu/gZ1ZReYsqCslbp0XZpdZppAS30aRVA+HrM+hUACsBfBtaoMhMeAc+HwJ4UVVXmKTytj7bA8hX1fmBz2YA6AIAItLCrMMW8RQmInUA7GbK+Ed5qRDHPLsE00w3/+8x6tQFwIKIM8NgWSldvwk1lGYlHYKIozxVrW2OgEpiIIDhidTL+BzAIeINQFcCcAuASgCqmvSxAK4SkQYi0hj2D1r1n0UVWdYlAB4D8Dy8I75LAXwJoLKIfGr61f9xlFwWiTem9xqAV1R1buHnCa7TofB+ay8nWL1krtOi7DLrNJoE12eyFLU+g/5xQB6Nqu4BoCaAswEEl6+8rc/qANZHfLYeQA0AUNXFZh0uLkZ5hWX8o7wUKWqeocsYpaywvCldv1lFZwk1EMD4JJz9AQDMEW5jAO8UkW8svDMUAPiXqv5jUFZV54rIIABPAmgCYCSA2QCWmCz3whsXmQ4gD16XwF7wupGLVZaqTgfQ29StCYD/A3AAgG8AXA1vvOhbEWlZ1IZemkQkA16X93YAVySpzCvg/U4OVtW8kHxpXadF2VXWaWlJ0vosLKs5vAPyi+KZt+nGe0NE5ojIdFWdUQ7X5yZ4DX5QTQAlHWvbFChjWyCOWZ6IbApMdo6VL4F5FmcZQ/Omev0m2vU6EDHGDEpoEIB3VXVTWKaIi39iXrmkqu+oaldVrQfgDngDypNN2lZVvUJVm6pqa3hjOVNVNb+4ZUV4BMAQVd0KYHcAU1R1EYBseBcalEmme/QleBcOnKqqO5JQ5vnwLrA5TFWXhOUtjXVaDOVynZamZKzPgIEAJqhqccdHswG0jvJ5eVif8wFkmQueCnVDCYcvVHUtgGWmjLjKC6y/6sU4cy3OPGcF08y4bJsYdZoFoHXw6tWQ+id9/Za4oRSRA+ENvCd0dWqgvCoA+iE53a6FZXYXkUxzZdRzAMYUdieKSFMR2U08+8O78uqOkpQVyHMEgMrqXQwDeBfEHGquVMtBki6sSJFnAHQC0Nf8wBIiIv3h3S5wRAl2cGHlJnOdVhKRyvDGxbJFpLI5qw7mKZfrVESyzLJlAsg0y1biHiQRyTDlZXuTUtl0lyZazyK3K8QxHCMi+4vIQWadVhGRf8M76JsYka9crE8zXvcugLtEpJp4t7qciMQucnwVwBARqSPeBTMXIQn7W/O7yDGTOWY6nnm+B6CriJxqvnM7gJlR1j/MWO10AHeY397JAPYAMDqiLqlZv6paon/wftQjYqRtgtfVFi1tKICRUT4/C8AfAKQ43wukK4C2EZ+Nh3dqvsbUt1ogrReARQC2AJgHoH/Ed8cCuCWeskx6jlmRLQOfHWbmsQzAmRH5hwO4p6R//2T+g3cUr/C6RzYF/vUP5CnWOjU/0B0R5T1bxtbpODOP4L/eu8g6HRpl2YYmsD57RylvXCrXp0k/AN6tKTWilOevT3hdszMCZX0DoFdE/nK1PuFdsfu+Wf7FAM4OpLUw67BFjO/+o+5m+YcB2ABgOYBro3xvHIALY5TZG8CSGOvV+RfvPAEcDmAuvFsMxwHIDaQ9i8A+A0CuybMV3vZ9eLrWb2ms/CFmxa+L3ChCvjPP/CiGheTZBm9w9+7S+mHHuSw5Ztk3w7vUudTrxHXKdcr1uWutT3jj85sA/B5n/nZmmbcAODdGnl6mkVoH4KjSXsZ0rl8xXyQiIqIo+FB0IiKiEGwoiYiIQrChJCIiChF6ufgRGf04gFlKPi94W4rOVXxcp6UnFeuU67P0cBvd9cRapzyjJCIiCsGGkoiIKAQbSiIiohBsKImIiEKwoSQiIgrBhpKIiCgEG0oiIqIQbCiJiIhClPj9dESJWHTPAX6cX9m9v7pBl5V+/EM353VzjjZfnefHNSZVcdIaPT4h0SoSEQHgGSUREVEoNpREREQh2FASERGF4Bglpc3aj9v58S97PhnXd3aEPB56bp8X/fi1fZo4aW99fogf58/5Nc4aUlkh3bs40x9/OMKPd3/2Cj9ufjfHoktDZu1afjzvydZ+HNwmAWDIiu5+/HP/9k5a/uz5Kapd8vGMkoiIKAQbSiIiohDseqWUCXa1AsD3e74Z1/eeXWe7ch7+4Qg/zm250sn3Wed3/bh/jWVO2r3n1vfj1v9m12t5s2Lfms70TuT7cdW/+LrG0lbQqpkf/9z7OT+OHCq5p+FUP+528oFOWnN2vRIREe0a2FASERGFYNcrJdXOw+xVbl91eyoiNduPHl1rr4D7+ox93Gx/rfDD9mun+HFG5cpOtvsm7u7Ht9T/2a1HnZ1x15nKnrV75DvTS3bm+XG9l35Id3UqvKzmzZzpVs//Vko1KR08oyQiIgrBhpKIiCgEG0oiIqIQaR2jXH3RAc50iwG2n3vuikZO2vY8O57V9A0bV12yyclXMH12MqtICdrUtJIfZ0QchwXHJcedYMcX8xfMi6vs3+7cy5l+ve7/BaZynLRmn/AYsLzRnnv68XfHP+ykHfLtlX7cFj+lrU4V2eLb7e0c3Y9297MPNfmu2OVVP9C9vevP22z59WfaawqqfDCp2GWnGvcmREREIdhQEhERhUhr1+uNN7zuTJ9aba2daBPyxd42XLRzi5P02Mo+iVcsTpNWtPTjav9Xy0nL+nJqZPYKqfar9tL906ac46TJ2g1+vHPZomKXfeGxXzjT1TNyYuSk8mhNZ/vy7SaZVZ20pu9kR2anFJv5ryf8eIfmh+SMz7hur7kfdLPhe5vtSw2GbTzJyZb1VenvW3lGSUREFIINJRERUQg2lERERCHSOkb5+C1nOtO372Hb6Tpz3MfOr+0kflxpj3V+/FDXd518jzSZ6Mcfb6nux8dVdW8jCbNVt/vxxLxqfty78g43Y2Bebc/4l5PU/su4Z1dhJOPFrIvutbcUXVD7vxGp9pF21y3b30mp8cUcW4+Ea0HpcNhldnz7/c21nbTq4+wtRFyfqZM9zo4VZktmwuX9tL3AjxftaOCknVxtjR+fXt0+tvL0Ec87+Y5v2h2ljWeUREREIdhQEhERhUhr12u1dyZGTMfOWzPG50807u1M39Mz137nG/ukn4d6t427XllbbfdAtZn2BcD1vh3t5Nu9UuAJQYt4uXqqrBtgu1u/H2i7W2tluG8P+SHPdg1Nv8d9ak+VDWXv6R7kyuzSwZm+r+EbfvzSBvdtFfnr1qelThXN1pN6ONPnNXnbj4O3hMR7e0jXLy9xpht8aW/hylnvlnFzb3ue9nO/x2OWueRm+wSfZvdPiKseycYzSiIiohBsKImIiEKUuxc37/x7uTNdbbSdDp7YV3tndYnKX36h7fbrUsn98/x3je0qyn15gVuvEs2Nolm1t70COrK7NWjQuAv9uP377Gotb5YeUS9m2tSNLSM+2ZraylQgwS7vex52rzDdp9L2YM6YZQSfpDPk61P9uNONc518+Rs2IJYOv9qXJEw6wW7nPXK2OfnGXvqQHx9Z+UYnLfc++9QezctDqvCMkoiIKAQbSiIiohBsKImIiEKUuzHKVMhq2dyPn7zlST+OfDLF248d7sf1lv0ASo7tn7vjUT90DL6Q2Y5ddPthkJOv03W/+zGf1lL+bOi8I2ba9Cf3dKZrg9tbshQErr1wxyRjO/+Po53pjWfYN720X2KvDyjOdhh8ctdlw+1tJVP+9aiTr0mmnde0C9y0U9+1+wSdMQepwjNKIiKiEGwoiYiIQrDrFcDca5r68b459mHss7a7l6TXne2+NJpKLqt1rh/f3fZtJ61O4JaQqYErvlve7Xbs5K9dCypf8o7Z148/OPIJJ+2uVfbh13VHz3TSCkDpdsvyffx4w4XurTz5S35N6rxyR6/y49tOcl9w8EDjyUmdV0nwjJKIiCgEG0oiIqIQFbLrNe+4fZ3paac9EpiyD/G99KqrnHxVJvDpL8nS5q2lfrxXpdjHa2cFHrLcfkbpd8FQYpYcanc5e1Ryn7o0aNHuftxws/uEF0qNsHdOztw7+I7g5Ha1/oPYIa+sDLejPayOf91p48YnJb1WPp5REhERhWBDSUREFIINJRERUYgKOUa5+Bj3+KC62HHJsxYe4cdVP5nh5FNQItYOsm9mubNR8Ok7OU6+QYvsE5A63Whfxs2n75R/Dbqu8ON8dceisj6ok+7qVEjzLq3qx/G+kDnVFp1ibz95p4F7LcgOzQzEbn13u8PGqbyFiGeUREREIdhQEhERhagwXa8ZNWr48YCDxztpGwrsi0JX3Nfaj3PyeDtCIrKa7uZMHzx4oh9Xz8iJzO77YXZbP26/luugvMtqZR96/98O9ilML6xv7uSrO4wPPk+HIQePKZX5ZjVv5kxv7G73D8+e93RcZUzKc28pku07E69YHHhGSUREFIINJRERUQg2lERERCEqzBjlr0O7+PFH9d3+8BN/PdWPc/7HMbFkmXOLOwb1fuPoYyN9fu7nTPOWkF3Lr/+yY1H7B4amL5rWx8nXHL+kq0pUCmbf2diZnnXkk3F9b/Sm+n78zPXuvqLynPQ8VpRnlERERCHYUBIREYXYZbte15/jvvxz5hmP+/HvO3c4aZsetJct52BZaitWgUw94ZGIT6LfElLrMveZGjv5QuZdSkHzbVE/37quctTPadeRPa6JH9/fZHSJyhi+9EA/rjymdN7gxDNKIiKiEGwoiYiIQuxSXa/BJ8FcfdsoJy1H7KKeOWOAk9ZgLK90LU07GtVyprO3Ny12GfkrVznTmpfnx5Jju3wzG9RHLPkNajvTv15XKa55a7596WzHK39z0vI3bIirjF3Z0/uNjPp507GxX8hLqZMpdqgj7KXIG87eP2banXe95Md9qkTvWo8s/58PYI9v/euhS4vOlGI8oyQiIgrBhpKIiCgEG0oiIqIQ5X6MUrLsInT7aIkf96u+2sn32saGftzoNvf4IJUv/KSiffzOsITLOPCns5zpVctr+nGdBhv9eGL31xOeV5jOQ65wplvfWPHeiLGtbw9n+qDKwUv6y/0up9x7YNRpfnz6BY/GzPftf57y47AXPO+I84328b4kuuuXlzjT7TAtvhmkEM8oiYiIQrChJCIiClH++0G6dfDDuxuOiJntqfvsw3Rrz6h43WGl4cTZ/Z3pL7u+k7J5TdjrjRJ9b4tu9+MdGrsT/tiZ5/rx+umxbzFpOj49L5Ityxaf4PbFBW/NumvV7n5c/YOpTr44e/AoQa1H2VupJp3jPh2pR07sWz0SFfnS5ef/PsSP115mH5jecWHELVYpq1H8eEZJREQUgg0lERFRCDaUREREIcrdGGVm5/bO9MVvfhA1X+dhlzvTuSN+TFmdKLoqRy10prvcZ2+d0Dh/eTU6rvHj4tza0eW78+y8FleLma/1O5vsxKSfY+arg1+jxuTJrGlvx/l3z//FzPf62F5+3HonrxUoDfmz5/vx7dde6KT92deO088/5rmkzveyYe5tH83vnRCYKttvDOIZJRERUQg2lERERCHKXdfr3MvqONN9q0Z/O0OzcdvdD5QXn5e2Vrck1tV2PLrHPy/MTGheVDwFgbe1zN6ym5N2+NJ9/LjdfbP8uCxc9l/RVfnAfRFy+8BIVq+z7PBV9rnLnXyfdLFvZzrylzP9uGB4Qyef2hfrIHf6SietPK1/nlESERGFYENJREQUolx0vQYfsvxl3/+LSK2a3soQ0T8EX5Q9bx83rRL+8OPy1N1W0dV8I3CnQMSDr06G3SdXw4JAygLEUp7XPc8oiYiIQrChJCIiCsGGkoiIKES5GKP8q2emH7fIij0mGXw5c/YG9/YQ3hxCREQlwTNKIiKiEGwoiYiIQpSLrtcw96/u7Mc/HJXrx7os9gOuiYiI4sUzSiIiohBsKImIiEKwoSQiIgpRLsYoW99k3zpx7E17h+T8O/WVISKiCoVnlERERCHYUBIREYUQ5QuNiYiIYuIZJRERUQg2lERERCHYUBIREYVgQ0lERBQi7Q2liAwXke0isijO/O1FZJOI5IvIhTHy9BaRApPv6KRWOMlE5AJTTxWRtqVdn2QQkaEissMsV7U4v/O7+R2MDMmjIrJZRO5NXm2TT0RyzLLvEJF7Srs+ieI2WvTylDcVfRsF4lueWBJqKEWknYhsK8GMH1LV3Cjl1RWRlSIyvvAzVZ2vqtUBfFdEmX+panVV/cSUJSJyq4gsFpENIvKmiNSMmN/hIjLNrOg/ReT0GMsZ3MgL/w0KpD8qImtF5AcRaRr4vL+IPBYsS1VfMstTpojIFSIyRUTyRGR4CYoYZf7+m015fUTkaxFZH22Hq6ptANwXR7ndVPXWQD37isgvZh1MEJHOgbRnI9ZRnohsjFao2Rl+YH5va0TkUxHpEEg/TEQWisgyETkj8Hlt85upEViWPLNOX4tjedKqPG+jZl6jRGSV+fda5DYcyLu/iHxu1uVKEXlbRJoE0s8263KhiPQOfN7G/I78l94WY3nSSkQ6ichXZpv6TUROLmYRkdtobRF5RURWmH9Dg5lTtI2KiNwjIkvNcowTkS4hy/y1WZ8bRGSGiJwYSOsmIrPMb+OawOfZIjJRRJqXcHn+IdEzyqcATE6wjKAHAcxJUlkDAQwA0BPAbgCqAHiiMNGsvNcB3AqgFoA9AUwNKa9wIy/894oppweA7gAaAxgP4GbzeS0A1wO4PUnLk2p/AbgHwLAklbfZlHVDksqDiLSD1xhdAqA2gDEAPhSRLABQ1UuC6wjAGwDejlFcbQAfAugAoBGASQA+CKQ/CqAvgKMBPBPYkd4P4AFVjdoAl0HldhuF93usA6A1gDbw1tPQGGXVAfA8gFwALQFsBPAyAJjfxwMA9gZwJYAnA997HMC1qpqfhOVJGbMMHwD4CEBdABcDGCki7RMo9hEAVeH9zXoAGCAi5yVYz9BtFEA/AOcDOBjecvwAYERIkVcBaKKqNWGXufAA6H54+9huAIaISGPz+bUARqvqn4ksS1CJG0oRORPAOgBfJqMiInIAgK4wP+4k6AvgJVX9U1U3wdvAzxCRqiZ9CIDnVHWsqu5U1dWq+nsJ5tMKwHhVzYP3t2htPr8XwH9UdX2Cy5EWqvquqr4PYHWSypukqiMALEhGecZRAL5T1fGquhPeOm0K4JDIjOJ1L50K4JWQ+r2kqmtUdQe8nUYHEalnslRT1V9UdQaA7QDqmYOiVqr6VhKXKWV2gW20FYD3VXWD2Y7eAxD17MNsx2+bvFvgNYY9TXI9AEtVdRmAL2C2URE5zXz+Y5KWJ5U6wjuYeERV81X1KwDfwzvQKKm+8HoOtqjqIgAvwWvEElHUNlq4v1xgDk5GAugcvShAVWeacgBAAWQDKDxTbAXgK1VdCuBXAC1EpAW87f6RBJfDUaKG0nR/3AXguihpLURknalwvOVlwjvyvQLeHyMZxPwLTucAaGem9zfz/tl0yYwUkboh5TUUkeWm6+YRsf38swAcLCJVABwGYJaI7AOgg6q+nqRlKXVmnR5U2tXAP9epwNt5RzoVwEoA38ZZdi8Af6tq4YHCCtO10w1AAYC18M4yB5ek4um2i2yjTwE4XkTqiEgdeOt0bJxl94K3bQLe76CeiDQDcAS8bbQ6vIPlmxNbhLSRGJ/5v/0SbqORf/9o21JxywvbRt8E0Fa8oY9sAIMAfBJaoMhHIrINwEQA4wBMMUm/ADjSrNdcAL/D6yG40Rz8Jk1JzyjvhjkSjExQ1cWqWltVFxejvMEAJqpqWNdncY0FcKGI5Jpu0H+bzwuPVpvBOxo7Fd6GGdntEzQXXtdsEwCHwutqfRgAVPUXAKMB/AigBbwjqMcADBaRwSLyrRlbqZ3EZUs7s07HF50zpT4HcIh4Y8aVANwCoBLsOg0aBOBVjePRU2ZDewpel02hS+Ctx+fh/U4uhXdmVlm88cyvReQfZ7JlyK6wjU6Dt35Xm3/5AJ4uqlAR2QPekMcNAKCqBfDW3zvwuuougncQ8QSA3c26/FREEm0kUmkugBUAbjBjcEfCO0vzf/sl2EY/AXCTiNQQ78LC8xF9WyqOorbRZfDGfucB2AqvK/aaaAUVUtXjAdQAcCyAT836BLx1eSm8IZRr4PUgbASwQLzrD74RkX4JLg+AEjSUIrIngMORpFNbEdkN3kZ4a1F5A98JXrAR66h4GLwxqnHwjiy/Np8vMf9vBfCyGbjfBG+Q99hoBanq36o6W1ULVHUhgBsBnBZIf0RVu6nqGQDOgPdDyIDXp34YvDGdm+JdvopIRMYG1mn/aHlUdS68BvBJeBtcfQCzYddpYVnN4e1EXo1jvg0AfAbgaVV9IzCv6araW1X3M/M4H95v5EUAdwI4D8AIEYl2pF+qdqFt9G0A8+HtJGvCO2MIvSjJ7PDHArhKVf2LcVT1S1XdX1UPgddDsA+A4fDGx86Fd2DxYrzLl27mDOkkAMfBe03SdQDeQsRvv5gGw9sP/gpv/PONsPKStI3eAWBfeN2nleFtS18FutujUtUdqjoWwFEicoL57A9VPVZV9zb1vwte4/lfAKMAnADg4SJ6CuNSktds9YZ3mrvY7COqA8gUkc6mwsXVA96Z2mxTXhUAVUTkbwBNow2yR141KiKto+QpgLdS7jB5jgSw1PwDgJkoeReSIkpXiIg0AvAveN26fQHMVNUdIjIZ3qA0xaCqx8SZ7x14ZwYwZ+nn458XqwwEMEFVQ8dHTXfeZwA+VNWwy9sfATBEVbeKyO4ApqjqdtN11ADekX5Z0hu7xjbaDcBlgas0n4V3wVxUItIS3hjk3WZ8PFoegbcTHwxvJ56pqn+YZdkjVtllgarORGA8XkQmIMYYfJzlrQHgN3gich+8i9pi5U/GNtoN3tW3hQ3ncBF5FN445ZTIsqLIgndhV6TbAbyoqsvNNjpEVdeLyBIAbRGyXPEoSdfr8/Aquqf59yyAj+EN4pbEWHgbdWF5twP4CcCeiVyJJt6l5W3E0xleV+ldgdP2lwGcJyKtzdHMv+FdURatrN5mXEfM2coDcK+QLPQwgDvMxQQLAexrxkJ6I7kXtSSdiGSJSGUAmfB2qpXFXqlWkvIyTHnZ3qRUNl0xidazu4hkmjPB5wCMMUexQQPhnS2ElVMTwKcAvlfVmGf7InIEgMqqWvjbWAjgUPEuac9Bki5+SrJdZRudDK9rtop41wBcDGBGjLKaAvgKwFOq+mzIbC8E8JOqToe37qqYefdB2d9G9zDbUVURuR7ewcvwBMprIyL1zPZ0DLy/b8L3ARexjU4G0E9EGpl9xAB4+4jfopTTUUSOMes/W0TOgTf2/E1Evs7w9rHPmI8Kt9FG8IbVijPEEFWxG0pzhdTfhf8AbAKwTVVXmkq3KKK7JbK8vIjy1gPYYeJE1AfwP3i3KYwFMExVnw/Mdxi8rrmJAP4AkIfAhRpmGQ42k3vDu4x5M4AJ8AaRnYs6RKQPgNqq+p4pfxK8ndOf8DbCBxJcnlQbAq8b5iYA55h4SGFixN8jHr1MGf+DN3a7Fd7ZWxSzjlEAACAASURBVKIeg3cl5zzz/0XBRPGuzGyGKLeFmK6jW8zkyfC6gM6L1U0oIjkA/gO3N+BKeA3PF/DOdsrcbQW7yjYK70wkF1633VJ4V6ueW5go3j10hWdEF5r0O4LrMzgzEakPb13eZpZrJ7yLk76Ct06vTHB5Um0AvO7MFfCGdI5Q72p7ACXaRrsD+BneuN79APqr6qzwr8QlbBt9EN7BznSTdg2AU1V1HeDfC114oCPwbgdaAe+CrKsAnKGq0yLm9xS8rvbCbfFmePvnWQDuS8LvFFDVtP4D8AK8Dff3OPO3M3/QLQDOjZGncKe8DsBR6V6mYi7/eaae2wC0Lu36JGmZhsDb2a2Dd1tFPN+ZZ34Hw0LybIO3U767tJexiGXJMcu+GV6PQqnXKcHlqejbaJHLU97+VfRtNN7lifWP76MkIiIKwYeiExERhWBDSUREFCL0qsYjMvqxX7aUfF7wdkruz+M6LT2pWKdcn6WH2+iuJ9Y65RklERFRCDaUREREIdhQEhERhWBDSUREFIINJRERUQg2lERERCHYUBIREYVgQ0lERBSCDSUREVEINpREREQh2FASERGFYENJREQUgg0lERFRCDaUREREIdhQEhERhWBDSUREFCL0xc1lRX6fvf34iuffctKeadc2ZfPdeMb+znTt6atsneb9lrL5UvGtG3iAMz3xgWf8uPNTl/lxiwcnOfl0587UVmwXltWyuR83HLXOj7+Z2tnJ1/Fpm5Y/a17qK2ZkNmjgTK8+xu4r6oya5seal5e2OlH5xDNKIiKiEGwoiYiIQpSLrtc/jsrx47qZm9I237+P2+5M7xhgjyvqHp+2alAMWU138+O7b38xZr7Zlz/tx8c8frCTphs3Jr9iu6isxo2c6bvGjfbjDtkFfnzo6sZOvvxZv6a2YgHB7tb+46c5aftXfs+PL//5Xzbhp1kpr1d5l1m/njM975EWfty7nV2/Sw/Z4eTbVbq1eUZJREQUgg0lERFRCDaUREREIcrsGKVkV/LjQw+dXip1qPFTZWf69Au+8eOvazdz0vLXrU9LnchacVRLPz6y6o6Y+faecoYfN9g0P6V12tVkNWvqx7VGbXHS9qiU6ccdvrjEj9sNcscG02nOPbl+fHr1T5y0vR+90Y93+2lCuqpUbq244kA/vuOqV52046p+FvU7J9Xv60zvXPpX8itWCnhGSUREFIINJRERUYgy2/W68WT7NJ7Hmz7hx53ev8LJ1w4TU1aHvDrqTA+uM9ePx9Xo5GZm12vKZVSt6kwfNXh8XN/LebOOnVCNnZH+YW1P+/Sd93Ofipmv05AVfpzOZx3pAd2c6d+Of86PD/m5n5PWfJjdfvNTW61yK7N9Gz9+8bpH/XjPSm5TUYDolj1Tw5lu8i97q9DOZX8nXsFSwjNKIiKiEGwoiYiIQrChJCIiClFmxii1557O9FMPPubHIzfY2wA6DnEv70/lWMMBR/6SwtKpuPIOdMeF72n4Usy8Wwrs4wdrvv5jyuq0qwm+EQQAVp64LWbeff57pR83/jN9t1sExyWHvPZKzHybPnYfpVdt9YKU1WlXMecmO54fvP0nXhO7v+5Mz//BboenjLjWSWt9709+XLAt9u+sLOAZJRERUQg2lERERCHKTNfr2pvdp340y7IXmV975XF+nL12akrrkdXEdte83MJ9sscO5XFFaVp4SvxdQaf9elJgatd4Okg6/PlYdWf61x7D/XjICnd4pOnL9q0b6bzdYmnvan7cM8e9UaHrhEF+3OIJPn2nKJmd2zvTXxz2aGCqih89uNod9piyzr49ZFQbdz8Z1D7whLUX+j/jpD047EQ/Llj4R1z1LS3c8xMREYVgQ0lERBSiVLteV190gB+/vft/nLRX1+/hx9lfpLa7NWj2Xfaqvx3qdigNWnS4H+evWJm2OpHnuH1nxExbX7DVmd4x1L5kOINdr3FTFWc6uA1MXJ3rpGVuXYFUyajhPuFl3r2d/fj9Ex724wJkO/la9Ps5ZXXaFa3q4b6QOTfLPv3q4j97+fGS/Tc5+TKq2aGy7pfYq5+vv+gtJ1//GvY30st9xwTGjF7sx7OPK9tP8OEZJRERUQg2lERERCHYUBIREYUo1THKjJNW+fFuWTlO2kuvH+3HzZDay7wzu3Tw45GH2bcP5Kn7MuDFD9tLqavlpe6tJWTlHbuvHz/Z9IWY+ZZEvLIi45ufomekEvtfx/ed6QvG9fHjxRub+PH2l9wn4sTr74Ptm12O3c99WfuHuz0dmLLjkj2nn+nkq4NfSzTviirf3e2iAHYdzHxudz+uix/cfJs3+3GT/7P757f67uvkO6vGR3ZC3Vt5lufZcWjdlhd/pUsBzyiJiIhCsKEkIiIKkdau18wGDZzpIe0/jpm32X3pe6rG3Mtq+/E+OfZy+KfWdnbyVRvN7tZ0W75vdtGZAPT96GpnOpUv9N6VNXyiijP99fP2mv4+VdwHV7/U4ms/zoC9raTg4ZK9HNspA7HLeGOjvfWn3i3xvVCYoqtx6rKYaeuPst2rdV+Or7zbW34Y8Unsc7Hvfurox+3XTopvBqWEZ5REREQh2FASERGFSGvXq1R1H81wVNX1ftxj8kAnrTHmpKVOAFA/d03Uz19buI+bD/Oj5qPUqbTX2phpc7bbp4N0fHyVk5bOh3TvSrK+cp+C9dhBh/rx3QfmOmlLjrTdo7/1fdaPJ+W5T/c557NL4pp3u1ftlY8fvz0sZr6HZh/lx01nzIqZj4q2cXQT94MuNjy3sx2++HbfHk62lXvZh+fr8Xb/2TXb7UKds8PeOdAl8IB0AHjvmCf8+N/7X2QTfpxZdMXTjGeUREREIdhQEhERhWBDSUREFCKtY5QFa9Y503ev3NuPz24zxUn7tkkbP0720+SzWjZ3pr/f883AlD122Ppj/YhvcowyHbYdb8dDpuwbfNmr++LmeTsa+nH+/N9TXa0Kaeffy/246rvLnbT279r42Ev2RiztEd+l/xl72NsFgreKAMA9q7r6ccur7LUNEQ9komJq/OFCZ3r+zdv9+IZ6s/343++714zEun3njN+Pc6a3Dra3BJ78xjgn7byaf/rx74PtfrfNj0VUuhTwjJKIiCgEG0oiIqIQ6e163bjRmf5sqe1q+W7P1520ZR/VsmnPHYDiWtfZ7Rqonmu7a/bfbZFbrxjP85CSPWCEErS1vu1izZbMmPlunHqKH7dC2buknIpn8R12XUd27X12r32JcPU/y2DfXDkVOax18Q32CVcv/9e+ILt9djX3i4EHnLf9zN7a0fGKuU62gs22+/aBr/o6aRecZIdVHtzH9uO/2M3tvi2Ykb5bBWPhGSUREVEINpREREQh2FASERGFKNUXN9e50z7S7pChZzlp73Ud7scP3uG+NDQeU/Lcsa38wDHBPpW2R+QWRNPiiZ+dab6ZID3yTloX9fPgI+sAoNmL8b1ZhMqmVRe71x7M3P8pP160c6uTVmVl5DZLqVD9bfvYuvNwrR+vOd3d9ratt2987nSDvTUrP/BC50gdbprtTB/Wzl5j8HmX0X58xx3u+VvTU1DqeEZJREQUgg0lERFRiFLtesUk27VZ61g3aUDvwX68rl0OiqveC7G7a5e+28WZnrrf8Kj5Im9nodTIbN/GmZ6y78hgqh+N3dTVyZf9hfumCypfthyxKWbaadMvdKYbfj0t1dWhCMFu2Opvx84X75t6IvenG94LbM+BXfKDe4x28j3dpLcfJ/spbfHiGSUREVEINpREREQhSrfrNUTmONvVUm9ccsveuqiG+8F+0fNpzz2dafl+enIrQgCA5X0aOtOxnsbz5NdHONPtMDFqPiofnus+wplelm+vrKz3aNV0V4fSrMFz9mH5+x1zth9P7O4+pe2q63P9uM117HolIiIqc9hQEhERhWBDSUREFKLMjlGmVMSDeDJiHC9wTDI9ttWN/mQkAJiaZ5/I0unBJU4aX9pb/iy5+UA/7pnj3vLxY54dl8zk7SC7vgJ7Y0m9/7PrftUI96lMc860T2zq+/pAJ02nzkpR5Vw8oyQiIgrBhpKIiChExex6jXghc6wXN1N6NDx0acy0Dzfs5cf5K1elozqUQv3P+tKPI1/OfMGUc/24JdwXEmTWq2snGtbzw/w5vya3glQqMr75yY97v3KDkzb7fNv1uvFet1u2Zj97q18qn6TGM0oiIqIQbCiJiIhCsKEkIiIKUSHHKAsqxx6TXJmfl8aaVFySY98Ic+JuM2LmW729uh9rHtfNrqwg3x63r7jiQCftuAu/8+P3FzTx47LwUl9KrrbP/+lMj+jX2I+/3f0dJ+3obuf7ccb41N3OxzNKIiKiEGwoiYiIQlTIrteRRz/rTM/Zbrtizxp+ox+3wIS01anCybdP5Xh+zkFO0tUHLvLjcX+29eOmSM9TOKh0zOn1sh8X9HJvHenyre1iazt0sx/H+9JgKj92/uk+geutkw/x4wFfjHLSVt2wzY8bjk9dnXhGSUREFIINJRERUYgK2fV618ITnOnNTzf14xaj2d2aDrrTPtI896bNTlqn+wf4sUyPeMk2lWuf3mq70Wbf3MRJ+2FiRz/u+NhfTlqbv+f5cf62baCKI/j0pTMWHOmkjdnrRT++YP/LbMKPM5NaB55REhERhWBDSUREFIINJRERUYgKOUaJw9zLj6thSYyMlA75vy10plv0K6WKUMpVHjPJj1eOcdPa4kc/5ku5KZotJ7u3DU2csJsfr+1QzY/r/Iik4hklERFRCDaUREREISpm1ysREZU7+atWO9PPt2/tx3XwQ8rmyzNKIiKiEGwoiYiIQrChJCIiCsGGkoiIKAQbSiIiohBsKImIiEKIqhadi4iIqILiGSUREVEINpREREQh2FASERGFSHtDKSLDRWS7iCyKM3+OiGwSkR0ick+MPLkioibfxUmtcJLFszzljYgMNcuzSUSqFf0NQER+N7+DkSF5VEQ2i8i9yattasSzPGVZCbbL9mZ954vIhTHy9BaRApPv6KRWOI12hW2W22hi22iJGkoRGSci28wffZOIzCtmEQ+pam5EmYeLyDTzR/9TRE4HAFXNU9XqAF6Lo9zaqvq8Ka9/oH6bRGSLWandTXqOiDwrIstFZI2IjBGRpiHL3FdEfjFlTRCRzoG0w0RkoYgsE5EzAp/XNstUo/CzYi5P2ohIJxH5SkTWi8hvInJyMYsYparVVXWzKa+2iLwiIivMv6HBzKraBsB9cZTbTVVvDdTzUPM33SAiC4IHRiJynIiMF5F1IvK3iLwQ/NtHIyJXmXW3WUTmiEh783k3EZklIqtE5JpA/mwRmSgizUu4PCkjInVF5D2zLH+IyNnFLMLZLs02Msz8rf8WkWsL01R1vvkdf1dEmX+Z38UnpswmIvKhiPxltsfcYOaweZr0w0RkrtmevxaRlrFmLN4B9Ncm71wROTyinHK3zYrImeZ3utns+A8uxtedbdSUt7eIfGv2a8tF5KrCtAS20Zj7SpPeWkQ+EpGNZvt6KGR5w7b3tG2jiZxRXmH+6NVVtUMC5cD8IV8HcCuAWgD2BDA1kTJV9bVA/aoDuAzAAgDTTJarABwAYA8AuwFYB+CJGPVrB28juQRAbQBjAHwoIoUPlX8UQF8ARwN4RkQyzef3A3hAVTcmsiypZpbjAwAfAagL4GIAIwsbjRJ6BEBVALkAegAYICLnJVjPbADvAXgO3u/kDAAPi0g3k6UWgHvgrc9OAJoB+E9IeRcCuADAcQCqAzgewCqTfD+A6wF0AzBERBqbz68FMFpV/0xkWVLkKQDbATQC0B/eb7FLAuUNBdAOQEsAfQDcKImfGRYA+ATAqcWdp4jUB/AugNvg/U6nABgVMq83APwEoB68fcs7ItLApJW7bVZEjgDwIIDzANQA0AvePq2k5dWHty6eg/c3agvgswTrGLqvFJFKAD4H8BWAxvC20ahneHFs72nbRsvKGOUQAM+p6lhV3amqq1X19yTPYxCAV9XeD9MKwKequlxVtwF4E0CsncpRAL5T1fGquhPej7UpgENMejVV/UVVZ8DbUdUTkR4AWqnqW0lejlToCK9xeURV81X1KwDfAxiQQJl94Z2hbFHVRQBeAnB+gvWsC6AmgBHqmQxgDoDOAKCqr6vqJ2aeawG8AKBntIJEJAPAHQCuUdXZprzfVXWNydIKwFequhTArwBaiEgLeDv4RxJcjqQTrzvtVAC3qeomVR0P4EMktg4HArhbVdeq6hx4f89zE6mn2d6eBjC5BPM8BcAsVX3bbLNDAXQTkY6RhZiDvL0B3KGqW1V1NICfYRvo8rjN3gngLlX9UVULVHWp+X2W1LXw9oGvmbPmjeZvnoii9pXnwutleFhVN6vqNlWdGaOs0O0dadxGE2ko7zenvN+LSO/CD0Wkhen6alGMsvY33/3ZdIWMFJG6CdTNYbpnegF4NfDxSwB6ishuIlIV3hH42FhFmH+R013N9ArTDdAN3hHzWnhHrIOTtQwpJjE+6+pPeOv0oATKdcorCVVdDu8s4TwRyRSRA+CdeYyP8ZVeAGbFSGtm/nUVr6t/oYjcaRpQAPgFwJEi0gzeWfHvAB4HcKOq7khkOVKkPYB8VZ0f+GwGzMFfcbdLEakD7+BpRrTyUiGOeXYJppkuxN9j1KkLgAURZ4bBssrVNmvOePcB0EC8oZElIvKkiFQJ5CnuNro/gDWme3SFeMNPxdlvR60qwveV+wNYJCJjTfsxTkR2j1ZQHNt72rbRkjaU/wbQGt6RwvMAxohIGwBQ1cWqWltVFxejvGbwjnxPhdftUgUxukFLaCC8o5yFgc/mA1gMYCmADfC66u6K8f3PARwi3sUJlQDcAqASvK5FwOtmeAze32IAgEsBfAmgsoh8Kt44ySFRyi0r5gJYAeAG079/JLwjwMLlg1mnsRqkaD4BcJOI1BCRtvDOJqsW8Z14vAHgdgB58MbHbo3WxWK6qQaZvNE0M/8fCWB3eN18Z8HrigW8Lp1L4Z2VXQPvzHQjgAUi8oGIfCMi/ZKwPMlSHcD6iM/Ww+uiK8l2WT1Qxj/KS5Gi5hm6jFHKCstb3rbZRgCyAZwG4GB4w1N7weuNA1CibbQZvG3kKgAtACyEt30loqh9ZTMAZ8Jr0HYD8DGAD0zeaMK297RtoyVqKFV1ojlNz1PVV+B10x2bQD22AnjZXCCwCd6Aa8zyzABu4UU68QxmDwTwSsRnzwCoDK9vvhq8sY+oZ5SqOhfeD+pJAMsA1AcwG8ASkz5dVXur6n7m8/PNMrwIr7vkPAAjRCTamVupM0dfJ8Ebq/sbwHUA3oJZvhIaDG+9/gpv/PONsPLMEWbhOu0fI09HeGNSA+FtfF3gjWEdF5Fvf3hj3qdFnGEFbTX/P6Sq60z38HMwvztV/UNVj1XVvU3974K3Yf7X1OEEeOMlSev5SNAmeN1UQTXh7ThKWl5hGXGVJ+7FcyU5MylqnsVZxtC85XCbLfy9PqGqy1R1FYCHkfh+9z1VnWy6su8EcKCI1IqWOZ5ttKh9pZnneDPMth3e9lQP3olK5PxCt/d0bqPJGqNURO++i9dMU0Z8M1PtovZCndCr7kSkJ7wjl3cikroBGK6qa1Q1D94ZbA8zwB1tnu+oaldVrQdvbKsloo+zPAJgiKpuhXemMsXshLMBNIiSv0xQ1Zmqeoiq1lPVo+D1GExKoLw1qtpfVRurahd4v7WY5anqMYF1Guvqwq4A5qnqp2aMZh68I9JjCjOIyF7wjjDPV9UvQ6o4D97YVDy/u9sBvGi6ggrX6Xp4G3/bOL6fDvMBZJmLKQp1Q+yu51BmjHeZKSOu8gLrr3oxe5TineesYJoZl20To06zALQW96rnWPUv89us+dssQTH2k3GI3O8WxlH35XFuo0XtK4uzry9yew9I6TZa7IZSvMunjxKRyiKSZY4segH4NIF6vAyvH7q1GS/8N7wrMJNhELwroCKPOicDGCgitcS7uuoyeIPMq/5RAgAR6W76yRvAO/MYY46egnmOAFBZVQvrvhDAoeJdeZgDYHWSlinpRGQPs06risj1AJoAGJ5AeW1EpJ75mx0D70raRO9B+wlAO/EuGRfT3X88zLiViHSF1+V7paqOCStIVbfAO+q80XQPNwNwESJ+d+Jdkd0bXg8EYNdpI3jDBMVuEFLBjNe9C+AuEalmDhBPBDAigWJfhXc1YR1zdH8REvhNFBKRyvC2BwDIMdPxzPM9eGPKp5rv3A5gZuR2CHi3rwCYDuAO87s+Gd4V7qMj6lKettmXAVwpIg3FG8+9GontJ18GcLKI7Gn2gbfBO9tbl0gli9hXjgSwv3i3A2aaZVgF7yKdSKHbe2B+qd9GVbVY/+AdYU2G14WxDsCPAI4IpLeA1+3RIsb3hwO4J8rndwJYaf6NAFAnnu+ZtFx4RylZEZ9XNnU8LMp36sG7jHmFyTMeQI9A+lgAtwSmx5tlXgNv5VeLKC8H3obZMvDZYQAWwTtKPjPe5SmNf/Buo1hr1t1YAG0j0jcBODjGd4cCGBnx2ekA/gKwxfxdjornexHpGqUep8MbxN8I72jxQQAZJu1leBdmbAr8mxX47rMAng1M14R3tfNGAH/C2/FKxPy+BrBfYLobvK6kVQCuLc7ypGEd1gXwPoDN8HYOZwfSir1dmt/0MHhj+Msjl9fkGQfgwhhl9gawJMZ6df7FO08Ah8MbU99q5p0bsn5zTZ6t8HoQDo+yfOVmm4V3hvs0vP3V3/DG+SoH0ou1jZrPL4V3ncZaeLdyNC/ObxrRt9Gi9pWnAPjNrONxALoE0iL3uzG390CelG+jpbGyXzAr9Pc48+eYH8ZmeJd6R8vTEsA2k++i0vohJ2t5yts/eBcUbDbLVS3O78wzv4NhIXm2wbsA4+7SXsZkLE9Z/leC7bKdWd9bAJwbI08v00itQ5QDpfLyb1fYZrmNJraN8jVbREREIcrKAweIiIjKJDaUREREIdhQEhERhcgKSzwiox8HMEvJ5wVvp+RGZ67T0pOKdcr1WXq4je56Yq1TnlESERGFYENJREQUgg0lERFRCDaUREREIdhQEhERhWBDSUREFIINJRERUQg2lERERCFCHzhAREQVU0bVqn7cfYL7Ot87Gkz34yNnn+LHlY74I/UVKwU8oyQiIgrBhpKIiCgEG0oiIqIQHKMEkNW4kR9vb7dbXN/Jnr/UmZ53c2s/rj3bPle37pxtTr6M734qSRWJyo1tfXs401XGTvNj3aezHy88oZqT7+BDf/bj777aPWb5TX7I9+PKYyaVuJ70T8FxyfnPd/Dj9xs87+QrCMR/zmjix23AMUoiIqIKhw0lERFRiArT9br+nP39ePWxbnfoTXt94scDa/4vrvJeWt/CmT6lxnt+XKdf5ZjfO75p97jKJyrrMuvX8+P8UVX8+M12Dzv5ludn+3GtjHF+3CKrKmIa9G3MpBXnbPHjvx6v5KT9676r/LjeCz/ELp+iWnBrNz+e3edxP+6/4Bgn3+p7W/lxm09+TH3FShnPKImIiEKwoSQiIgpR7rteM7p18uO5V9qr6L478lEnX4PMyfY7STg+uKDW4ohPYne3Eu2K5j9mhx/mdXwpkOJ2qTbMtPHT69r78bSN7vDFks21Y84rU+x1lh93GBO1bAAYNeQ/fnzJnCuctIzx00HhtjfcGfXzmd+1c6ZbfVKxurV5RklERBSCDSUREVEINpREREQhyv0Y5eZWNfx4/jHPBFKq/DNzgp5dZ5++89of+5aojFr4LVnVqRAy9rRPctnW2H2Sy6KT7BOQTusx2UnboXbw6usR9kkxTb5Z7+TTn2YlpZ4VgR7QzZkedeBzgSm7K/lkqztG+cANg/y4xqxVNmHlGidfxto/Y887w67P9v93mR/PPv0JJ1+b7Op+vHXIBiet1rn2CVw7/14ec14VWXb17X68scDGLT7PK43qlBk8oyQiIgrBhpKIiChEmel6zWrW1Jme8+9mftxogu1iq/mG+xSIjDz14/k7bFfBnzvdS82bZ63z43N/GeSkrZ1jnzDSaLItr/YEtytIN23y41rr2IWaLNpzT2d6weU2fv2AF/y4e6WIewHidYN9cPbW67c7Sc+vs127T884xElrd8EcPy7Y5j7NqSLaUct9Cs6elezuowB2u7nh5fOdfM3fm+DH+SihAvvNttfYfUCnSu4tIDNPfMyPv9n9HSet5+G2y7bWSHa9AkBm21bO9Kxew/z4qr8Os/m+noaKjGeUREREIdhQEhERhWBDSUREFKJUxygza9fy4x4fL3TS3q//oR/3nOKOQwTljLW3Bdxw3Ll+nD9rnjuvTvYRTHXn/e6k1S2YH7Xs6A9zopIqOMiORS6yw0X4uOdTTr42WcFbe+y45Odb3Vt+bpl9kh+vW+yOSf9ykr1t4Lbl9s0xDzWe4uTrVsW+aPbhHqOctJuvOdePm90/ARVdfmWJmbbHhHP9uMW96ftbtbt8ojP90eH2JcL9qq920tadsNmPa41Mbb3Ki3lDYz82MJ3yjrG3221sHrtZajDVveVHp6bn9i6eURIREYVgQ0lERBQirV2vGZXdN2zkvWO7Xm+p/5WT1uFd2zfX8T17eh12eXlkd6uTNufXOGtJybLgdfe2j9di3urhdqmetfAIP548116+3vGqOU6+Bpvt+m4QMe9Luh/uxysGt/Tja55xbzEZ0micH3+3tYmTNv0K23170sgT/Xjnn0tQEXW4OXY3V+bUGjHT0unWybY7vl+fl5y0y7vYl0F/hDppq1NZ9sh+o2Kmff/63n7cGIl3p//+2l7O9GP7veHHu1ca78eNMnNilvHbDndA7MR3rvHjNten7gXSPKMkIiIKwYaSiIgoRMq7XjPr2C6OuXe3d9LmdXraj6dGPHO3410L/Dh/g3ulE5UdGdXcB5X/etfufjznEPdq1ozAFayTA09U6v/B5U6+DnfaLtb2UqTthwAAIABJREFU6+xVqgWI3+41lvrx51m2+3bKf7o7+eo9bK+aPKnaOrhiX+VZUWTs0dGPe9f+3Embv8M+raj+zB1pq1OYOt8Ehnf6lF49yrLMmjX9uFqGu+P9bKvdnhs/El93q2TbJzZt77OHk3brMy/7ca/KU520bLH7g0l5trt14Nx+Tr5rW33mxydU2+KkPX2S7V5/dNjJfpw/O/qdDCXFM0oiIqIQbCiJiIhCsKEkIiIKkfIxyr/O6eTH8052X7L64WY7fvnS8Uc4afkr3afnUNm07oTdnemv+v3XjzPgvsD3y612HOKBy+wbXNp+5l7WHe8bJiTL/nwzOrRx0l58v64f/+fVV/x490orIkqxdcwU97hx94ln+3HTFRXz9/jrIPvkljOrr3TSDpo5wI9r/s99cTaVXQuv7urHB1X+0knr/PVAP26Ln2KWEXzryLzL7QuxI1+kHfTl1urO9GWfnuvHHR+zL/TOme9ua0/BXtvyxJfNnbSPOr7rx/e3sLcbVpodsxolwjNKIiKiEGwoiYiIQqS863Xjfltjpj220L4YtMr8itm1Vd5pxLuUt2nsWyo2Ftgn8Py9n72kfOspPZx8bdsti/r99dvcJzv1a2lfJnt57RFO2pTttvyeOcEbS9zu4KDvt7k3oDS9xy6L5uVFZq8QrjnmYz8O3g4CAJWeqheY4vZbXsgesW+3y/69Ssy0oODD1Of2sbeBRd7C1X/BMX684camTlq7H+ytWfEOt/y2oLH7Qcfo+ZKNZ5REREQh2FASERGFSHnX6xs9nw9Mue3yO53tS+EOePg6J63Vh9v9OHPcNFDZVOcD90HZFw/s78cjO7ov/Tuhmn0az6mX2qcy5WvsZ+7kqX0Ico6E/VzdNLe71doZ0cnTe+aZflz3cjdNF6TnXXflxXOreznTlT+aVEo1oUR0bLi82N+R7l2c6fcOeiYwle1HXcZd7ORrd4F9ypZsm1Hs+Rbl9hX2PZaVx/3sx8V5ilc8eEZJREQUgg0lERFRCDaUREREIVI+Rtkjx/Zf71B3DKhOhr3cf+4Z7psmdpxu83b98hI/rjXZvUVgUzM77lXTvnAE9WdujlmnVXu4b7xoNM4+rSWft6kUS8HGjc50zpF2+uJGpzhpc4bm+vGR3e14wvz1DZ18fyyt78eZlezv4IQOM518DzWeguLq/LU7htLhOvuWkZ3LI5/aU/Fk1q7lTNfIqJgvqd6VNatq35KTEXmuJIpo5g92X6bcKdvu17tPPseP2/R3n+aT7LHC7OrbnenNO229CrZti8yeNDyjJCIiCsGGkoiIKETKu15bjbnIj+cf/2zc3wu+1HPe4S/YhMOTUi3HpJvsE1iunh24XeD45L78s6LJj+jKbH+pnV4U+LwS/nDytYuYLvTZe52d6bCu10U77QteT3riRlv2o+4tDfk7d4KsJRe4twH0r/G1H0/bnJvm2hRf3rHrY6ZtKagUM60iKVB7flQQ2Tka48laTRq5LzUPfq9zA3u7ydok1C9S8AHss3oNc9J6zTzdj2um8OlQPKMkIiIKwYaSiIgoBBtKIiKiECkfo+xwub1c+Ki33UvzBz45xo+rZrhvZzi+qn1JbHC8MhV65NhLosfv9Zofd/nPYCdfmxt+SGk96J8W3neAH0/b95GI1NhjTqc9ZMcld3tqgh9Hv/idyqudh3Z3pt/c68nAlHtLw3sP2rcV1YL7snAKV/sC99aLid/Z20OebGH34wc8eL2Tr/3j9nqDnUv/KtG8O42yZSzPd99GVfmxuoEpjlESERGVCjaUREREIVLe9aqBy++zv5jqpL3RcbeY33v8NHubRn62vWT5wOvdy/sfaDw50So6gk+qaNYt+guEKbX+uuFAP/60/0N+XEViv3T5sbVtnenGL0/342Q/HYRKV7C7dc1V7hO4Ombb7tbLlvZ00mqPsm8hqkhd8MHbKwCgV62vil1GZLfpg4ef5MfdRttHov1yzuNOvssO6ePHy46r66Tlr17jx+sG2CGWg66e6OS7vdH3ftz9Tbdrt80n6elC5xklERFRCDaUREREIVLe9VpS1d6ZGPXzMd0OcKYfGGC7XreofWBu928vdfK1fNFeObtq8BYnbcq+7guGKb12HLmPM/3+Fba7tUVW7O7WxYGn73z478OctJwtye2SryhqLnJfXBB8wlFpkiy7q1p3jX3w/pS933Tyfb61ih/Pv819ylClHcV/iP6uIP+3hc70m3/38OOT23zipLU8aLEfZ9asacvYsMHJt3PBIj+eupc93+o1wL1ToO5M+0Qfqb/DSVv4ZHM/ntXLXq0ceWVrsLu1zfWlc7UyzyiJiIhCsKEkIiIKwYaSiIgoRJkdo4ylxafuE3wwwIZVxT6pZc4hL7nZWh7hx//L/TSi1OjHC4v/di9nbue884KSZdHx7pOXcmOMSy7Ld8fLBl59nR9X/Tj6mDYVT7XR7t/xk7s7+XGbyiudtF+bdfXjnUuWIlEFB+3pxwsvc9NO7WRv97mvoTsuGXTf9YP8uMqnk2Lmq8i2XWjHHh8e3dFJ+6jjB3581Zf29ppJz7rXhlT/K/pbd1bu696Mte9ge+vI/+023kkL3or3/PpcPx7+3+OdfG2Glf4T0XhGSUREFIINJRERUYhy1/WaPeVXZ3r/aWf58Y97vxHzeyNyPw9MuccHeWovWz4+8OLmjoPdh+y6F85TIjLr2W7tn055NCI1B9H0Hn+FM93mPXa3ptNltd3bDJZ/ZLvwpqxpkXD5D7R63o/3rBR71zR1u90SB0y6wElr89VcP+b2Gl3+fLtf+/ZE9xaaOh/bJx09stt3NuGu7xBLsAv1Hy+CDtF1/Hl+3PbaVX5cd2npd7VG4hklERFRCDaUREREIdhQEhERhSh3Y5QFGzc6042vrOPHfYed4Me35H7s5Dsgx45YjN5U30m79X9n+HHba+wjkjjGkVyZdey6unqiHfOoLtHHJAHgwdX29oR2F7nj03wrSOoFL9VfcdW3TtqdDWbYiWBcYnZ3tDNi65thn06Jc0bZx6S1uskdz+I2WzzBR9EBwPu97S0/j59n3xCyuZX7+LlPj7bXFRz16dU2IeS1LB1edF/+nDt5pq1HPJUtRTyjJCIiCsGGkoiIKES563qNtHORfdo9DrXh4MHuoz027mufSN9xyConre0fpfNE+opm1Qn2KSBHVv3aj/NDumv+d2dvP662mbeDpFvdwFNRJn/b3kl7+H3blXZtHbdbvCQ6fnO+H1f62X06U7P7J/hxK5S92wd2FfnLV/hx0wdWxMx3JexTe9ojvjf1lOeXZfOMkoiIKAQbSiIiohDlvus1lkaPT3CnA3FZv8JqV3Xq9V/4cb7Gvma17ZhL/Lj9aHa3lhWRLwD+omsNG2PvhMtvjelFZyIqBTyjJCIiCsGGkoiIKAQbSiIiohC77BgllT3dqthbeTLFHqP9uM19nkrnh+xl6RxPJqLSxjNKIiKiEGwoiYiIQrDrldLm6tfsS3bnXvS0H58/7EonX/MF7q09RESliWeUREREIdhQEhERhWBDSUREFIJjlJQ2Le+wY49H3bGnHzcHxySJqOziGSUREVEINpREREQhRLU8v06TiIgotXhGSUREFIINJRERUQg2lERERCHYUBIREYVIe0MpIkNFZIeIbBKRanF+53cR2S4iI0PyqIhsFpF7k1fb5BORHLPsO0TkntKuTzKIyHCzfhbFmb+9+Rvki8iFMfL0FpECk+/opFY4yUTkcFPPAhE5vLTrkyhuo0X/PssbbqNygamnikjb4n6/RA2liHQSka9EZL2I/CYiJxeziFGqWl1VN5vyaovIKyKywvwbGsysqm0A3BdHud1U9dZAPfuKyC/mDzRBRDoH0kRE7hGRpWY5xolIl5BlXiQiW01Zm0Tks0DaYSKyUESWicgZgc9ri8g0EakRWJY8Va0O4LU4lidtRKSuiLxndmR/iMjZxSziIVXNDZSXIyLDRGSDiPwtItcWpqnqfPM3+K6IMv8yv5NPTJkiIreKyGJT7psiUjMwz6Yi8oGIrBGRJSJyScjyFlXWDSKyyvx+ugY+7yki7wfLUtUvzPIsRhkhIleIyBQRyROR4SUoInIb7SMiX5ttZVFk5hRtozki8oiI/CUia0XkaRHJjlVwoCEu3EZfDKSdbbbPhSLSO/B5GzPfzMCyxPv7TCuzj9oWWL55xSwichstbDw3Bf5lAindRmdFzG+niIyJsbzBhrjw36BA+qPmd/GDiDQNfN5fRB4LlqWqL5nlKZFiN5QikgXgAwAfAagL4GIAI0WkfUkrAeARAFUB5ALoAWCAiJyXQHkQkXbwGqNLANQGMAbAh6b+ANAPwPkADoa3HD8AGFFEsX3Nj6K6qh4Z+PxRAH0BHA3gmcBGdz+AB1R1YyLLkiZPAdgOoBGA/vCWI+aBQxyGAmgHoCWAPgBulMSPOgf+f3v3HSZFsa4B/C1Y2CVJWAUkLDnnpBiIZq+gKB5FUFER9ah4DIgBBVGPer1XFMwKYg6ogHiPYgADIiJIkmAiCIiAKBmBZb/7RzXVXcN07eyE3WF5f8+zz/P1VE1tz3TXVFdVBwAXAzgBQA0AZQCMDaS/AmAl9Gf4LwD/Vkr1KGhZSqmjAVwBoD6ApwE86L2eAeB/Afwrwc9RGH4DcB+A8Ukqb6dX1tAklRdLHb0NQEcALQE0BtAewPB8im0TqKODvP+TAb0N2wO4HsDjgfxjANwkIvsPLiotXRf4fE2SUN5/B8orn4TvwVlHRaTFgf8FoAL0weVER3m/RazfiwCglDoGQAcA1QHMBHC793pFALcAuDvBz2GJp0fZFPoLGC0i+0VkOoCvoL+cePWC3mC7RGQVgHHQjVgiTgPwpYjMFJFcAA8BqAmgm5deD8BMEVnh7RyvAGgevah8lROR70VkIXRjk+1tyHoi8lZiHyP1lB5eOw/AXSKyQ0RmAngPiW3TSwDcKyJ/icgyAM8BGJjgqvYCME5E1ojIDuhteoFSqqxSqjyA7gDuF5F93rZ4G+H7UWhZAHIAzBeRbQA+gW4wAd1Avufto2lNRN4VkckANiepvDki8jKAFckoz5NfHe0FYIyI/Ckim6AbtXh+F7IBrBOR9QhsT6VUX+/12Ql+DvK56lWkrgCqAngnjv9z4Pd7D4BP4dfR+wE8LCJb4ygzVDwNpQp5LTg8tUUpdWIC5VrlxUlFKTNY7hsAGio9Fl8KwKUAPsynzFeVUpuUUh8ppdoEXt+olGrjvZYH4C/oXuaQBD9DYWkMYL+I/Bh4bSGAFgCglMrxtmlOLIUppSpDH0wtjFZeAqJt00zonqsKvBZMD9uPXGX9DKCVUqoSgJMBLFFK1QZwIYD/SfAzpIU462jSVwPuOhotvZbXawjzhdJD/e8qpep6r22CPnitBeAU6O1ZHrp3envCn6JwPeBNCXwVMYRcoDoa8E+lpyrmKaXOS8L6uepVpEsBvH1geD9EVaXUBm/IfLTy58yXAOiilCoD4CTobdoRQBMReS3xj2GLp6FcDmAjgKFKqVJKqVOhjwDNEYOIVPJ6JbH6EMBtSqkKSk+0Xh4sL04fA+jmjXOXBnAHgNKBctdDj7//AGA39FDsjY7y+kMPDdcBMAPANO+HFNBDR48BeBa6F3YN9FFOllJqmtJzO90OLjJtlAcQeQS2FXpoBCLyq7dNY52DOzAXECzTlJeADwAMUkrV9X4sh3mvl/WGt78CcJdSKksp1R66lxy2H7nK2gx9ZDodegj3FujtOwxAH6XU50rPhdZK8PMUmTjqaCrkV0c/AHCDUuoopVR1+AeeYdu0G3QdbQo99Py+UipDRPKg6+Tb0NvySgCjoIcEW3n1c5oKzEWnqWHQPaea0L81U5VSDYC46iige+iNoHt1dwGYoJQ6IcF1DK1XwUxeD7MvgAmOspYDaAvgaAA9oYdaHwEAEfkeuic6G3oE6CHoOjpEKTVEKfWFUurVwG90QgrcUIrIPgDnQP+A/A7gZgBvAVibwHoMgW6sfoKe/3zdVZ5S6oPA5G7/kPVcDn3E8jh0o3gkgKWBckcA6ASgNoAsAPcAmB4yRAAR+UpEdnvDww8A2AI9vwkRWSAi3UXkWO9/XA59YsPzXrmXAXhZKRWtN54OdgA4IuK1IwDEO7e6I1BGTOVFTNiHHRWPh943PoM+opzhvX5gm/aHHpJZA+Ap6PmvsP3IWZaIvC4i7UXkDOgezh4A86F7lL2g51WKRe8yFZJUR++H/s4XAJgFYDKAfdAH6tHK+0JE9orIFgA3QO8Lzby0T0Wks4h0gx716Qj9I/0y9JTAvdD1NW2JyDcist07IfBF6APDMxMo7zsR2SwiuSLyH+j6cm5Y/iTV0QPOBfAngM8d6/e7iCwVkTwRWQngVujG9UD6aBFpIyIXALgAuuNTAvq8mZMALIOe505YXGe9isgiEekmItkichr0Uc6ceFfCm4PoLyLVRaSFt16h5YnIGYHJ3dCzR0XkbRFpKSLZ0A1jHQDfesltoM/sW+vtKBMAVEbs85SC6MPQowEMF5HdAFoBmOvNaZUCcFSMZRe2HwFkeCdXHNAGekcvMBH5C/qHLzg87SwvYsI+6lGxV2FGiEhdEanllbfO+4OIrBaRs0TkKO+gJRsh+1F+ZR3gDe38G/qAsBGANd7c5bcAWuf/bRyeklFHvQPT60SkpojUh55vnSexn3ByUB31DlYfhz44PxJASRFZjUNze4b9BqWkvGTU0YBLAbwkUqCbjUddP6VUNQBXQY8StASwyOvQJW2bxnt5SGtveKusUuoW6K7xhHhXQulTtLOVUiWVUmdAHxEkfI2hUqqDV+ZRAJ4BMNU7igX0l3i+UqqaUqqEUupi6Mbs5yjl5Ch9WUBp73MPha5kX0XkOwVAloi87720EkBPpc8ezUSSTqxINm+O4F0Ao5RS5bzhl7OR/1nALi8BGK6UqqyUago93DUhkfVU+hKWBkprDj0MM8obWjtw2VIFbzsNAHCql6fAZQUMBzBBRH6DPkOviVcxeyC5J7YklVIqQymVBaAkgJLefhv382e9OpIFXUeUV17pJKxnaB1V+nKfGt426gw9PDgipJwWSqm2Xlnloc9OXgfdqwgaBH2i1gLo+ljG2/7pvj0rKaVOO7AdvV56VwDTEiizr1KqvLdtTwUwAPokvkTWM9965U1Z9ADwYj5ldfd+e5XS5wg8CD3iGOkRACNEZBf0b24n5Z/cl5xtKiIF/gPwMPQJKzugx6QbRqTvANAl5L0jAbwS8do/oOcUdkEPs5wWy/si0iXKesyEHu77E7oSlgukZUFfErEewDYA3wE4PZD+NICnvbgFgEXQp8hvhp5/7BjxvzK9da8TeO0kAKu8/3FhRP4JAO6L5/tPxR/0JTKTvc/4K4CLAmk53jbNCXnvQZ/F+z7Ge9/tBuhT8CPf9xmAQSFldgewNuK1xtBzyrsArI4sE/qs1E3eZ5gZZRuZ/TK/srw8TaAPqDICrw0F8Af0EGGriPyrAJxc1NsyUF8k4m9ktO8i5L2RdbR7lPI+y+99EekFraNdve90l7et+ke89wMAd3hxTy/PTuih2ckAGkXkPxLA9wCOCLzWH3oKaRWAHrHun0WwPY/y9sXt0NM+swGcEkiPp45+CX3uwDbok+0ujPK+0O8AcdRRL8/t0Gc7RyszWEdvgj7Y2QU9nTIWQIWI/D0A/F/Ea49Ct0+zAdTKbx+M6fsvgg0+3NuZtwQrRT7v+cH7Asc78vztbfR7i3qnzuezZHqffSf0UVCRr1MSPtNz3vb5Jcb8jbzvYBeAgSF5ukLPW29BlAOndPqDPiDa4q1vj6JenyR8nsO9jua7fx5qf6yjuMxbz78B1C/o+/k8SiIiIgfeFJ2IiMiBDSUREZGD8yy4U0qcz3HZIvJx3sSUXHPJbVp0UrFNuT2LDuto8RO2TdmjJCIicmBDSURE5MCGkoiIyIENJRERkQMbSiIiIgc2lERERA5sKImIiBzYUBIRETmwoSQiInJgQ0lEROTAhpKIiMiBDSUREZEDG0oiIiIH59NDiIiS6efRnU38ywVPW2mXrO5q4g3HbSu0daKCy+3ZwcQr+/jNyM0n/cfKN7jiKhOXgP1gjjz4D0kZsbGdiaeuamnlq/FASX9hzuK41jdR7FESERE5sKEkIiJy4NArpZ2M6tVMvPWEuiZed4r9PNuVvZ818T7Zb6WdsOBCE29aU9nEzR/83cqXu+rXhNaVCuaEzktD016q84WJu/S5ykorO+mblK3T4WzdsOOt5Z2N9pq4X4c5oe+7p6pf9/KQZ+ISEX2vYFqzzwZbaVXfyzRxhTdnm7gGwveRosIeJRERkQMbSiIiIgcOvVKRUJn+sMuKe9pbaY/3fd7E3crsCi1jn/jHecEhHgD4su1r/kLbQJh9uZUv5/yYVpeSJDi86vJbV/sMyYaTUrE2tHDI49Zy8EzUDft3m/jJzfYQbeMP/KHxcj+VNnHWH/b0SPa4r03cAPMTW9kixB4lERGRAxtKIiIiBzaUREREDof8HOX+7v78VsbdG0w8tcl7Vr5Syr+7g+tSguw7S5lYrVpn5dvcq7mJq0z+3krL2769IKt92Pt1qH9nj8UXPxZXGZetPsnE4+p8HNN7Fhw/3lrujU5x/W9KrYY3zs4/EyWs6+K+1vL0Vm+aODgvOa+d3adqjLmpXbE0wx4lERGRAxtKIiIih0Ni6DV4KcH23m2ttBEP+ENpwUsJ7IsFgH2Bs5ZdlxK0v2ugidtUt48jptT1T6XuVOl6K63a2FnRV54MOa6NicdfPrbA72/9whBrud6935m46ehrrbTlZz9R4PKJDjeVrtxrLb//abaJz6k0z8QLml1k5du/7KfUrliaYY+SiIjIgQ0lERGRAxtKIiIih0NijnJP91Ymnv7o46H5Zuwub+K777NvVVZql0RmN7bV8Y8XSgfumHbrLfalBFvzck1cfr19iQkdLDgnCQBy358m7uBPOx80nzxpR1UTjx/Y28R1v7GfZiB5/jZocuNCK+2MydeY+N6n/ScddMy0t9vJ3/uX9XzSskLkR6Aka/Dm1SaOfHBzUPABzwAvF0mV3DVrreXbJvU38dIB/m/t3up23Si5LLXrlW7YoyQiInJgQ0lEROSQtkOvwWG7B556JjRfv1/ONPG2EbVNXHnG19GyR1WxYT0Tt534i4mblbaPI5pOudHEjd/mg2Tzs7FTOWv526b+UHbwTklb8+xT1Ee85d8pqe7XsW1H2bPHWi71kX/nkAHT/OG+Jb3sofuhVfzt/dzrl1pp9frZw7mUONdwK6WBwENbSgQWNrfIsrJVUR0Qi8y5/mUk+7dtS2zdihB7lERERA5sKImIiBzSduj1rzv9h4YGz5A8c/m5Vr6Stxzhx/O/Qzy2dKhm4hFV3wrNV/ujuIo/bJU4ebO1HLwjUvBOSZet6G3lq3tX7MPmsWh8jX+27NgTW1hpN1VZbuL+zb+10mahNIiKs4zatazlB8951cTBhzjPvt1+cEEJRH9oeomIvlf3xf6T0fdMtOte8KHO6Y49SiIiIgc2lERERA5sKImIiBzSZo5y5RutreUl7V4w8dpcf76yxJ2VrXwyf1GB/1fwaSQA0PBfS/3yA8cOwQcDA0CZyfadYehgGTVrmPjmJp/E9J4VExtZy9WwKanrFDR+ysnW8k2XLQ/JSVQ8Beclz5xmXwLVu9xfJh6xsZ2Jp65qaeWT2ZWilt37wpnW8k31/d+Ac0ZtsdLyRvlzoKdfPNjEwUtKgPS4rIQ9SiIiIgc2lERERA5pM/R6SXN7WDN4yvHqXP8SEMwu+FArYA+3/vCofbPuKTn+Q36DN+he/XATK19Z8G48+fnrxBwT9y0/JTTf4DXdTVwzcDckAMhF0WhZxr5B9Jz6PU2cu2JVIa8NUWrsaOtPjwyuaNfRrov+YeIjzvDrZQ0sRSzmPWT3vRbW6mLi4YPqWGmdT19s4g9f9h9c8MSWBla+Dy7zy8CcxSgK7FESERE5sKEkIiJySJuh12Qr2cIeNl12fUUTL+/1RGR2I/hMywqzVlppfAJl/ja1V/lnAvDLg81MXOb39Dib+Kxy9p2EHulY3cTlOfRaqPj8ydTJmurXt7Om2jc3PwK/RGZPSO7adSbOGbnOSvttpB+3G3a9iSPPnL33Tf9hCrdfcbWVljF9XhLWMn/sURIRETmwoSQiInJgQ0lEROSQNnOU76xsay0PzfZPA26XudPEXRb9HVN5x5R911ruUcZ/X15k5oCbF/Y1ca0NS2L6X+TbXzb8SQJB6XKXo+ADpINPNCGiwlPzoVkmXvhqbSvt6GlbTTzq+eestBvuv9bEqXwaCXuUREREDmwoiYiIHNJm6LX6APvU4d6T+5j4/ab+3SOCQ7IF0SVw+nFeP/sygC/bvmbiqs+Vjat80lq3XmXiPOcgd3rYJ/5FP4fC+hIVd8FLSgBg4h2nmXj9SPuyoSeHjzHxpbVvMHHOyFlIJvYoiYiIHNhQEhERObChJCIickibOcq87dvtF07yl3v2+aeJN3YIb9srL/PP76/4qj2WvenlPSZe3vYNK23c1romLrtkvYmL6ikWVDRW5+61lsts2huSk4gKS5kp/qVkC+eFXzqy4MrHTNx7ZKekrgN7lERERA5sKImIiBzSZujVpewk/4HJdSfFV8byns+bOPIygCd+6GbiGmtie0ApHZoGnfNRaNrZLwy1lnNmJPcUcwIuWd3VxC/V+SI038+jO1vLfJoIAQdfOjJmYQ8TX91tRcr+L3uUREREDmwoiYiIHA6Jodd4RD64GfAf8Bl5dmO1MVmFsEaHh5131zDx3BdKWmkdM/274Pw6sZWJc86P725L8ehUxn4Y95w9/oOm6z680ErjfXqI0swxrazFlzuPM/ETWxqk7N+yR0lEROTAhpKIiMiBDSUREZFDsZ2jXDEPAIrKAAADwElEQVSidGja+fMHWcvVZ3yX6tU5bJT4fL6Jr330Oivt22FjTfzxsU+ZeGCPIVa+kkneHivfaG3iE7LmWWnHz+9n4io7f0zq/yVtV59jTfxSnWeKcE0o0up7jreWs/7w42pj0+PyqJLNG5t426idVlqtjN0m/nBgl0BKcs97YI+SiIjIgQ0lERGRQ7EaepXj2pj4vWOfjEj1LwFRn1YupDU6vB392Z/WcseeA0w8t9MrJl7b3b48p86MxP/3zvP84b63jvUf7vr1nkwrX5X7eGlQqtW7dVlRrwIFbL7iOBMvHjTWSmv2mT8tVc1OSlhG7VrW8uqLcqLmq3+mfYedO2q/buLZu+1LQPqM9O+mVeXbrxNdxVDsURIRETmwoSQiInJgQ0lERORQrOYoN3YqZ+J6GfbcU/CJIRl/Cyj18hYtt5Zr3unfVnDSpComfm/gw1a+04+8ycSNrv0GYVSHFibecFxFK+2Zm/2HuDYr7R8PNp062MrXePYcUHIFLwcBYr8kpMu1V5m44SQ+LaQwlFL2bSaXdfefsjR/pf+bedHXV1r5VCDuWv9nE/+wpaqVb0ariSYuAfuyrzxIIM0v8ckt9ax8/ab7+0XzkeuttCprUzcvGcQeJRERkQMbSiIiIodiNfT695F+Vz7y4cyP/tncxNnPFU53nWz7l/xg4hdP9x+4+syz9rb68KxHTPxWlw4mfuO1nla+5wf756+3ywx/1sfpS/uauOlT2600PiGkcDV482oTRz6MuSzCh9kpebLH+b9/x++82krb2GtP1Pe8eNw4a/mYTP+3NvjUjjxrUNa+3CRvs323tPqT9kX9X6Xn/WwtN94218S5Ud+ReuxREhERObChJCIicihWQ68Dzgm/pcv4KSebuC449FrUclesMnFmv6OstKvb3WDiUsN+N/G86x+z8jWdem1o+fXe9QdVM2csMnHevr3RslMSlZ1kD6GeNqmtiRuCZ7OmkwpvzI5Yjp5vFNrHWKI9tdEA80Pyhduff5ZCxx4lERGRAxtKIiIiBzaUREREDsVqjvKdlf5cyNDs5D64k1Jn/6ZN1nKpjwLLH/lhb3Sy8jVGbHfV4X2YiCgR7FESERE5sKEkIiJyKFZDr/Kpf6PtO2rZN2auNjcdTzomIqJ0xx4lERGRAxtKIiIiBzaUREREDsVqjrLamFkm/n6MnVYmxksJiIiIgtijJCIicmBDSURE5KBEeN8SIiKiMOxREhERObChJCIicmBDSURE5MCGkoiIyIENJRERkQMbSiIiIof/B5QpPZVoIUZ5AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "        [pred, accuracy],\n",
    "            feed_dict = {\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx,:][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx], order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 对模型结构的理解10分。 \n",
    "模型结构包括以下内容：\n",
    "（1）定义输入数据（x,y）和超参数如学习率(learning_rate)\n",
    "（2）初始化权重矩阵(W_1,W_2)和偏置项（b_1,b_2）\n",
    "（3）定义未经激活的输出(logits, logits_1, logits_1)\n",
    "（4）定义损失函数（cross_entropy_loss）和优化器（optimizer）\n",
    "（5）定义模型预测结果（correct_pred）及准确率计算方法（accuracy）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###  对模型训练过程（梯度如何计算，参数如何更新）的理解10分。\n",
    "（1）在一个会话中启动图开始训练sess.run(tf.global_variables_initializer())\n",
    "（2）将数据分批次送入到模型中，在for循环中\n",
    "  xs, ys = mnist.train.next_batch(batch_size)实现了参数更新\n",
    "  _, loss = sess.run([optimizer, cross_entropy_loss],feed_dict = {\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3})\n",
    " 计算了梯度（交叉熵损失）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###  对计算图的理解10分。\n",
    "（1）TensorFlow中图的定义和图的运算完全分开\n",
    "（2）涉及的运算都放在图中，图中有的节点代表一个操作\n",
    "（3）图的运行只发生在会话中。开启会话后，就可以用数据取填充节点，进行运算；关闭会话后就不能再进行计算了。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 解释这⾥的模型为什么效果⽐较差10分。\n",
    "使用了固定的学习率0.3,没有根据循环情况调整学习率。学习率设置的越小，训练的准确率越高。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
